﻿// 5296. 边的定向.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>


/*
https://www.acwing.com/problem/content/5299/

给定一个由 n
 个点 m
 条边构成的图。

点的编号为 1∼n
。

图中的每条边，要么是有向边，要么是无向边，保证给定图中至少包含一条无向边。

每条边都连接一对不同的顶点（无自环）。

一对顶点之间可能存在多条边（可能有重边）。

指定图中的一个点 s
 作为起始点，你需要完成两个相互独立的方案：

方案一：给每个无向边指定一个方向，从而最大化从点 s
 可以到达的点的数量。
方案二：给每个无向边指定一个方向，从而最小化从点 s
 可以到达的点的数量。
注意，点 s
 可以到达的点包含点 s
 本身，因此点 s
 可以到达的点数至少是1。

输出每个方案的可达点数量以及具体方案。

输入格式
第一行包含三个整数 n,m,s
。

接下来 m
 行，每行描述一条边，每行包含三个整数 ti,ui,vi
，分别表示边的方向以及边的两个端点，如果 ti=1
，则表示这是一条从 ui
 到 vi
 的有向边，如果 ti=2
，则表示这是一条连接 ui
 和 vi
 的无向边。

输出格式
输出共四行，前两行描述方案一，后两行描述方案二。

对于每个方案：

首先输出一行，一个整数，表示可达点数量。
然后输出一行，一个长度为 f
 的由 + 和 - 构成的字符串，其中 f
 为初始图中无向边的数量。字符串中的第 i
 个字符表示你的方案给输入顺序下的第 i
 个无向边 (u,v)
 指定的方向。+ 表示指定方向为从 u
 到 v
，- 表示指定方向为从 v
 到 u
。
如果答案不唯一，输出任意合理答案均可。

数据范围
前 3
 个测试点满足 2≤n≤6
，1≤m≤6
。
所有测试点满足 2≤n≤3×105
，1≤m≤3×105
，1≤s≤n
，1≤ti≤2
，1≤ui,vi≤n
，ui≠vi
。

输入样例1：
2 2 1
1 1 2
2 2 1
输出样例1：
2
-
2
+
输入样例2：
6 6 3
2 2 6
1 4 5
2 3 4
1 4 1
1 3 1
2 2 3
输出样例2：
6
++-
2
+-+
*/
int main()
{
    std::cout << "Hello World!\n";
}
 